ハッシュ探索 hash search
計算して格納位置を探すsearch 探索アルゴリズム Algorithms
規則性がないData要素のsearch 探索の際
前提:
Data数 n
繰り返し回数 a
1.線形探索 Linear search
時間計算量 time complexity $ O(n)^{a}
空間計算量 space complexity
2.ハッシュ探索
時間計算量 time complexity O(n)
空間計算量 space complexity n
後でsearch 探索しやすいように,データを格納する段階で工夫
Hash Table ハッシュテーブル
データを格納する位置はハッシュ関数 hash functionを用いて計算する.
探索時はキー値に対してハッシュ関数を適用し,データの格納位置を特定する.
うまく行かない時
衝突 collision,シノニム synonym
格納先に先客がいる
解決策
チェイン法 chaining
同一のHash ハッシュ値をもつ要素を連結リスト Linked list 連想配列 辞書 objectで管理する
search 探索
hash search,線形探索 Linear search
オープンアドレス法 open hashing
Hash Table ハッシュテーブルの空き要素が見つかるまでハッシュ関数 hash functionを繰り返す
search 探索
hash search
Hash Table ハッシュテーブルとハッシュ関数 hash functionの設計
衝突がまったく発生しない場合
ハッシュ表のデータの探索・追加・削除はO(1) の時間計算量
ハッシュ関数 hash functionによって添字を見つけるだけでほぼ処理が完了するため
ハッシュ表を大きくすれば衝突発生の確率を抑えられる
その場合,空の要素がメモリ Memoryを無駄に占有することに
衝突を避けるために
ハッシュ表の大きさ以下の整数をなるべく偏ることなく一様に生成するハッシュ関数 hash functionが望ましい
ハッシュ表の容量には素数 PrimeNumberがよく用いられる.
問題
LeetCode Two Sum